/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.dolphinscheduler.dao.utils;

import org.apache.dolphinscheduler.dao.entity.TaskInstance;

public class TaskInstanceUtils {

  /**
   * Copy the property of given source {@link TaskInstance} to target.
   *
   * @param source Given task instance, copy from.
   * @param target Given task instance, copy to
   * @return a soft copy of given task instance.
   */
  public static void copyTaskInstance(TaskInstance source, TaskInstance target) {
    target.setId(source.getId());
    target.setName(source.getName());
    target.setTaskType(source.getTaskType());
    target.setProcessInstanceId(source.getProcessInstanceId());
    target.setTaskCode(source.getTaskCode());
    target.setTaskDefinitionVersion(source.getTaskDefinitionVersion());
    target.setProcessInstanceName(source.getProcessInstanceName());
    target.setTaskGroupPriority(source.getTaskGroupPriority());
    target.setState(source.getState());
    target.setFirstSubmitTime(source.getFirstSubmitTime());
    target.setSubmitTime(source.getSubmitTime());
    target.setStartTime(source.getStartTime());
    target.setEndTime(source.getEndTime());
    target.setHost(source.getHost());
    target.setExecutePath(source.getExecutePath());
    target.setLogPath(source.getLogPath());
    target.setRetryTimes(source.getRetryTimes());
    target.setAlertFlag(source.getAlertFlag());
    target.setProcessInstance(source.getProcessInstance());
    target.setProcessDefine(source.getProcessDefine());
    target.setTaskDefine(source.getTaskDefine());
    target.setPid(source.getPid());
    target.setAppLink(source.getAppLink());
    target.setFlag(source.getFlag());
    target.setDependency(source.getDependency());
    // todo: we need to cpoy the task params and then copy switchDependency, since the setSwitchDependency rely on task params, this is really a very bad practice.
    target.setTaskParams(source.getTaskParams());
    target.setSwitchDependency(source.getSwitchDependency());
    target.setDuration(source.getDuration());
    target.setMaxRetryTimes(source.getMaxRetryTimes());
    target.setRetryInterval(source.getRetryInterval());
    target.setTaskInstancePriority(source.getTaskInstancePriority());
    target.setDependentResult(source.getDependentResult());
    target.setWorkerGroup(source.getWorkerGroup());
    target.setEnvironmentCode(source.getEnvironmentCode());
    target.setEnvironmentConfig(source.getEnvironmentConfig());
    target.setExecutorId(source.getExecutorId());
    target.setVarPool(source.getVarPool());
    target.setExecutorName(source.getExecutorName());
    target.setResources(source.getResources());
    target.setDelayTime(source.getDelayTime());
    target.setDryRun(source.getDryRun());
    target.setTaskGroupId(source.getTaskGroupId());
    target.setCpuQuota(source.getCpuQuota());
    target.setMemoryMax(source.getMemoryMax());
    target.setTaskExecuteType(source.getTaskExecuteType());
  }

}
